package com.algorithm.Common;


/**
 * 链接工具类
 *
 * @author 陈思博
 * @date 2024/10/04
 */
public class LinkedUtils {
    /**
     * 根据数组创造链表 无头节点
     *
     * @param arr arr
     * @return {@link LinkedNode }
     */
    public static LinkedNode create(int[] arr) {
        LinkedNode head = new LinkedNode(arr[0], null);
        LinkedNode p = head;
        for (int i = 1; i < arr.length; i++) {
            LinkedNode node = new LinkedNode(arr[i], null);
            p.setNext(node);
            p = node;
        }
        return head;
    }

    /**
     * 合并两个链表
     *
     * @param head1 第一个链表的头节点
     * @param head2 第二个链表的头节点
     * @return {@link LinkedNode }
     */
    public static LinkedNode merge(LinkedNode head1, LinkedNode head2) {
        LinkedNode head = new LinkedNode(0, null);
        LinkedNode p = head;
        while (head1 != null && head2 != null) {
            if (head1.getData() <= head2.getData()) {
                p.setNext(head1);
                head1 = head1.getNext();
            } else {
                p.setNext(head2);
                head2 = head2.getNext();
            }
            p = p.getNext();
        }
        if (head1 != null) {
            p.setNext(head1);
        }
        if (head2 != null) {
            p.setNext(head2);
        }
        return head;
    }

    /**
     * 打印
     *
     * @param head 头
     */
    public static void print(LinkedNode head) {
        LinkedNode p = head;
        while (p != null) {
            System.out.println(p.getData());
            p = p.getNext();
        }
    }
}
